<?php

namespace YouHuJun\YouHuTool\App\Utils\Timer\Task;
/*
 * @Descripttion: 
 * @version: v1
 * @Author: youhujun 2900976495@qq.com
 * @Date: 2025-06-15 11:55:28
 * @LastEditors: youhujun 2900976495@qq.com
 * @LastEditTime: 2025-06-15 12:02:22
 * @FilePath: \App\Utils\Timer\Task\Task.php
 * Copyright (C) 2025 youhujun. All rights reserved.
 */

/**
 * 任务类
 */
class Task {

    private $name;
    private $callback;
    private $interval;
    private $lastRun;
    private $nextRun;
    
    /**
     * 构造函数，初始化定时任务
     * 
     * @param string $name 任务名称
     * @param callable $callback 任务回调函数
     * @param int $interval 执行间隔时间(秒)
     */
    public function __construct($name, $callback, $interval) {
        $this->name = $name;
        $this->callback = $callback;
        $this->interval = $interval;
        $this->lastRun = 0;
        $this->updateNextRun();
    }
    
    /**
     * 执行定时任务
     * 
     * 调用回调函数，更新最后运行时间并计算下次运行时间
     */
    public function execute() {
        call_user_func($this->callback);
        $this->lastRun = time();
        $this->updateNextRun();
    }
    
    /**
     * 更新下一次运行时间
     * 基于最后一次运行时间和间隔时间计算下一次运行时间
     */
    public function updateNextRun() {
        $this->nextRun = $this->lastRun + $this->interval;
    }
    
    /**
     * 检查当前时间是否达到或超过任务的下次运行时间
     * 
     * @return bool 返回true表示任务应该执行，false表示不执行
     */
    public function shouldRun() {
        return time() >= $this->nextRun;
    }
    
    /**
     * 获取任务名称
     * 
     * @return string 返回当前任务的名称
     */
    public function getName() {
        return $this->name;
    }
}